package com.jie.langlangmall.service;

import com.jie.langlangmall.dto.PmsProductParam;
import com.jie.langlangmall.dto.PmsProductQueryParam;
import com.jie.langlangmall.dto.PmsProductResult;
import com.jie.langlangmall.model.PmsProduct;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @Author Jie
 * @Date 2024/11/22
 * @Email 3217998214@qq.com
 * @Description 后台商品管理
 */
public interface PmsProductService {

    /**
     * 创建商品
     *
     * @param productParam
     * @return
     */
    @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)
    int create(PmsProductParam productParam);

    /**
     * 商品的分页查询
     *
     * @param productQueryParam
     * @param pageSize
     * @param pageNum
     * @return
     */
    List<PmsProduct> list(PmsProductQueryParam productQueryParam, Integer pageSize, Integer pageNum);

    /**
     * 根据商品id获取商品编辑信息
     *
     * @param id
     * @return
     */
    PmsProductResult getUpdateInfo(Long id);

    /**
     * 更新商品的信息
     *
     * @param id
     * @param param
     */
    @Transactional
    void update(Long id, PmsProductParam param);

    /**
     * 根据货号查询
     *
     * @param keyword
     * @return
     */
    List<PmsProduct> list(String keyword);

    /**
     * 修改审核状态
     *
     * @param ids
     * @param verifyStatus
     * @param detail
     */
    @Transactional
    void updateVerifyStatus(List<Long> ids, Integer verifyStatus, String detail);

    /**
     * 批量设置删除状态
     *
     * @param ids
     * @param deleteStatus
     */
    void updateDeleteStatus(List<Long> ids, Integer deleteStatus);

    /**
     * 批量修改新品状态
     *
     * @param ids
     * @param newStatus
     */
    void updateNewStatus(List<Long> ids, Integer newStatus);

    /**
     * 推荐商品
     *
     * @param ids
     * @param recommendStatus
     */
    void updateRecommendStatus(List<Long> ids, Integer recommendStatus);

    /**
     * 商品上架、下架
     *
     * @param ids
     * @param publishStatus
     */
    void updatePublishStatus(List<Long> ids, Integer publishStatus);

}
